'use strict';

var defaultData = require('./data');

function getDialogCtx(_ref) {
    var selector = _ref.selector,
        pageCtx = _ref.pageCtx;
    var ctx = pageCtx;

    if (!ctx) {
        var pages = getCurrentPages();
        ctx = pages[pages.length - 1];
    }

    return ctx.$mp.page.selectComponent(selector);
}

function getParsedOptions() {
    var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
    return Object.assign(
        {
            // 自定义 btn 列表
            // { type: 按钮类型，回调时以此作为区分依据，text: 按钮文案, color: 按钮文字颜色 }
            buttons: []
        },
        defaultData,
        options
    );
} // options 使用参数
// pageCtx 页面 page 上下文

function Dialog(options, pageCtx) {
    var parsedOptions = getParsedOptions(options);
    var dialogCtx = getDialogCtx({
        selector: parsedOptions.selector,
        pageCtx: pageCtx
    });

    if (!dialogCtx) {
        console.error('无法找到对应的dialog组件，请于页面中注册并在 wxml 中声明 dialog 自定义组件');
        return Promise.reject({
            type: 'component error'
        });
    } // 处理默认按钮的展示
    // 纵向排布确认按钮在上方

    var _parsedOptions$button = parsedOptions.buttons,
        buttons = _parsedOptions$button === undefined ? [] : _parsedOptions$button;
    var showCustomBtns = false;

    if (buttons.length === 0) {
        if (parsedOptions.showConfirmButton) {
            buttons.push({
                type: 'confirm',
                text: parsedOptions.confirmButtonText,
                color: parsedOptions.confirmButtonColor
            });
        }

        if (parsedOptions.showCancelButton) {
            var cancelButton = {
                type: 'cancel',
                text: parsedOptions.cancelButtonText,
                color: parsedOptions.cancelButtonColor
            };

            if (parsedOptions.buttonsShowVertical) {
                buttons.push(cancelButton);
            } else {
                buttons.unshift(cancelButton);
            }
        }
    } else {
        showCustomBtns = true;
    }

    return new Promise(function (resolve, reject) {
        dialogCtx.setData(
            Object.assign({}, parsedOptions, {
                buttons: buttons,
                showCustomBtns: showCustomBtns,
                key: '' + new Date().getTime(),
                show: true,
                promiseFunc: {
                    resolve: resolve,
                    reject: reject
                },
                openTypePromiseFunc: null
            })
        );
    });
}

Dialog.close = function (options, pageCtx) {
    var parsedOptions = getParsedOptions(options);
    var dialogCtx = getDialogCtx({
        selector: parsedOptions.selector,
        pageCtx: pageCtx
    });

    if (!dialogCtx) {
        return;
    }

    dialogCtx.setData({
        show: false,
        promiseFunc: null,
        openTypePromiseFunc: null
    });
};

module.exports = Dialog;
